Caching and buffering file data within the operating system (OS) page cache is a key performance optimization that has been prevalent for over four decades [7, 26]. The OS stores a subset of data within the OS page cache. When needed by a process for reading or writing data, the OS seamlessly fetches pages into memory from backing storage. File access requests result in “blocking” page fetches within the OS if the page being accessed is not cached in cache memory. This page fetch behavior is common across virtually all systems software that manages DRAM as a caching layer for data that is stored persistently, either locally or remotely.
While read references to out-of-cache data require a blocking page fetch, the same blocking approach has been applied to handle page write requests. Thus, the target page is synchronously fetched before allowing the write to proceed, leading to a “fetch-before-write” constraint [20, 31]. The page fetch-before-write behavior exists in all the latest open-source kernel versions of BSD (all variants), Linux, Minix, OpenSolaris, and Xen. This basic design has also carried over to networked file systems in which a client issues page fetches over the network to a remote file server.
An undesirable outcome of this design is that processes are blocked by the OS from writing data during the page fetch. Writing data to a page not present in the file-system page cache causes the operating system to synchronously fetch the page into memory before it can be written into, effectively making what could be an asynchronous operation perform as though it is a synchronous operation.
Technology trends support page fetch rates sustaining or increasing in the future on several platforms. In server platforms, multi-core systems and virtualization now enable more co-located workloads, leading to larger memory working sets in systems. A recent report from VMware indicated that, of the four main computing resources for a typical system, the average utilization rates for memory space are the highest (at 40%) compared to average utilization rates of less than 10% for the other resources [33]. Furthermore, in personal computing platforms, newer, data-intensive desktop/laptop applications have greater I/O demands [14]. Page fetches and storage I/O also significantly affect the performance of the data-intensive applications on mobile platforms [16]. Flash-based hybrid memory systems and storage caching and tiering systems are also motivated by these trends [6, 12, 27, 15, 35]. A better performing solid-state storage layer combined with the increasingly data intensive nature of many workloads will likely result in event higher page fetch rates in future systems.